package com.atguigu.daijia.customer.service;

import com.atguigu.daijia.model.form.customer.ExpectOrderForm;
import com.atguigu.daijia.model.form.customer.SubmitOrderForm;
import com.atguigu.daijia.model.form.map.CalculateDrivingLineForm;
import com.atguigu.daijia.model.form.payment.CreateWxPaymentForm;
import com.atguigu.daijia.model.vo.base.PageVo;
import com.atguigu.daijia.model.vo.customer.ExpectOrderVo;
import com.atguigu.daijia.model.vo.driver.DriverInfoVo;
import com.atguigu.daijia.model.vo.map.DrivingLineVo;
import com.atguigu.daijia.model.vo.map.OrderLocationVo;
import com.atguigu.daijia.model.vo.map.OrderServiceLastLocationVo;
import com.atguigu.daijia.model.vo.order.CurrentOrderInfoVo;
import com.atguigu.daijia.model.vo.order.OrderInfoVo;
import com.atguigu.daijia.model.vo.payment.WxPrepayVo;

/**
 * @author 谢忠涵7
 */
public interface OrderService {

    /**
     * @description: 根据起始经纬度和终点经纬度 预估订单数据
     * @author: xiaoxie
     * @date: 2024/10/25 21:58
     * @param: [expectOrderForm] 起始经纬度和终点经纬度
     * @return:  ExpectOrderVo 预估订单数据
     **/
    ExpectOrderVo expectOrder(ExpectOrderForm expectOrderForm);

    /**
     * @description: 保存顾客订单数据
     * @author: xiaoxie
     * @date: 2024/10/26 22:22
     * @param: [submitOrderForm] 顾客订单数据
     * @return: 订单id
     **/
    Long submitOrder(SubmitOrderForm submitOrderForm);

    /**
     * @description: 根据订单id查询订单状态
     * @author: xiaoxie
     * @date: 2024/10/26 22:43
     * @param: [orderId] 订单id
     * @return: 订单状态
     **/
    Integer getOrderStatus(Long orderId);

    /**
     * @description: 乘客端查找当前订单
     * @author: xiaoxie
     * @date: 2024/10/29 14:15
     * @param: [customerId] 乘客id
     * @return: CurrentOrderInfoVo
     **/
    CurrentOrderInfoVo searchCustomerCurrentOrder(Long customerId);

    /**
     * @description: 获取订单信息
     * @author: xiaoxie
     * @date: 2024/10/29 14:24
     * @param: [orderId, customerId]
     * @return: OrderInfoVo
     **/
    OrderInfoVo getOrderInfo(Long orderId, Long customerId);

    /**
     * @description: 根据订单id获取司机基本信息
     * @author: xiaoxie
     * @date: 2024/10/29 14:56
     * @param: [orderId, customerId]
     * @return: DriverInfoVo
     **/
    DriverInfoVo getDriverInfo(Long orderId, Long customerId);

    /**
     * @description: 司机赶往代驾起始点：获取订单经纬度位置
     * @author: xiaoxie
     * @date: 2024/10/29 15:06
     * @param: [orderId]
     * @return: OrderLocationVo
     **/
    OrderLocationVo getCacheOrderLocation(Long orderId);

    /**
     * @description: 计算最佳驾驶线路
     * @author: xiaoxie
     * @date: 2024/10/29 15:08
     * @param: [calculateDrivingLineForm]
     * @return: DrivingLineVo
     **/
    DrivingLineVo calculateDrivingLine(CalculateDrivingLineForm calculateDrivingLineForm);

    /**
     * @description: 代驾服务：获取订单服务最后一个位置信息
     * @author: xiaoxie
     * @date: 2024/10/30 20:19
     * @param: [orderId]
     * @return: OrderServiceLastLocationVo
     **/
    OrderServiceLastLocationVo getOrderServiceLastLocation(Long orderId);

    /**
     * @description: 获取乘客订单分页列表
     * @author: xiaoxie
     * @date: 2024/11/1 10:26
     * @param: [customerId, page, limit]
     * @return: PageVo
     **/
    PageVo findCustomerOrderPage(Long customerId, Long page, Long limit);
}
